#include "teleinfo.h"
#include <stdio.h>
#include <string.h>

void InitTeleInfo(TeleInfo *p)
{
    p->size = 0;
}

void AddInfo(TeleInfo *p, const char *name, const char *tele)
{
    if (p->size >= 20)
    {
        printf("通讯录已满，无法添加新的联系人！\n");
        return;
    }
    InitInfo(&p->tele[p->size], name, tele);
    p->size++;
}

void RemoveInfo(TeleInfo *p, void *target, bool (*cmpFunc)(const Info *, const void *))
{
    for (int i = 0; i < p->size; i++)
    {
        if (cmpFunc(&p->tele[i], target))
        {
            // 删除联系人，后面的联系人前移
            for (int j = i; j < p->size - 1; j++)
            {
                p->tele[j] = p->tele[j + 1];
            }
            p->size--;
            i--; // 删除后当前位置的元素需要重新检查
        }
    }
}

const Info* FindInfo(const TeleInfo *p, void *target, bool (*cmpFunc)(const Info *, const void *))
{
    for (int i = 0; i < p->size; i++)
    {
        if (cmpFunc(&p->tele[i], target))
        {
            return &p->tele[i];
        }
    }
    return NULL;
}


void DisplayAll(const TeleInfo *p)
{
    printf("通讯录中共有%d位联系人 :\n", p->size);
    for (int i = 0; i < p->size; i++)
    {
        printf("%d. ", i + 1);
        PrintInfo(&p->tele[i]);
    }
} 
